# 构造一个基类“学生” ，包含“学习”方法。
#   构造继承类“计算机专业学生”，包含方法“编程”。
#   构造继承类“金融专业学生”，包含方法“金融交易”。
#   构造不同类的对象，对各自方法进行调用

# 构造一个基类“学生” ，包含“学习”方法。
#   构造继承类“计算机专业学生”，重新实现方法“学习”，增加方法“睡觉”。
#   构造继承类“金融专业学生”，重新实现方法“学习”，增加方法“睡觉”。
#   构造一个函数fun，能够调用基类“学生”的方法
#   构造不同类的对象，将其作为函数fun的参数，并在fun内调用其方法

class Student():
    def study(self):
        print("学习")

class ComputerStudent(Student):
    def codeing(self):
        print("编程")

    def study(self):
        print("重新学习")

    def sleep(self):
        print("计算机专业的睡觉")

class MoneyStudent():
    def py(self):
        print("金融交易")

    def study(self):
        print("重新学习")

    def sleep(self):
        print("金融专业专业的睡觉")

student = Student()
computerStudent = ComputerStudent()
moneyStudent = MoneyStudent()

def fun(obj):
    student.study()
    obj.study()

fun(computerStudent)
fun(moneyStudent)


# 按照要求完成
#   用户输入姓名、年龄、性别
#   实例化对象
#   用户任意输入内容
#     如果输入的是属性名 打印属性值
#     如果输入的是方法名(callable(getattr(xiaoyu, "eat"))可以判断是否是方法) 调用方法
#     如果输入的什么都不是 不做操作
class User:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print("eat")
    def sleep(self):
        pass

name = input("name")
age = input("age")
sex = input("sex")

user = User(name,age,sex)

while True:
    res = input("请输入操作")
    if res.lower() == 'q':
        break
    else:
        if hasattr(user, res):
            attr = getattr(user, res)
            if callable(attr):
                attr()
            else:
                print(attr)

